/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Servlet;

import Config.Constants;
import DAO.UserDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author minhtrungn
 */
public class LoginServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession();
        String action = request.getParameter("btnAction");
        UserDAO userDAO = new UserDAO();
        String url = Constants.Index;
        try {
           if (action.equals("login")) {
                String username = request.getParameter("txtUsername");
                String password = request.getParameter("txtPassword");
                String[] result = userDAO.CheckLogin(username, password);
                if (result[0].equals("1")) {// valid password and username
                    if (result[3].equals("true")) {//active
                        session.setAttribute("USER", result[1]);
                        session.setAttribute("ROLE", result[4]);
                        session.setAttribute("FULLNAME", result[2]);
                        String user = (String) session.getAttribute("USER");
                        String role = (String) session.getAttribute("ROLE");
                        String fullname = (String) session.getAttribute("FULLNAME");
                        url = Constants.Index;
                        if (user != null && role.equals("Admin")) {//role Admin
                            url = Constants.manageProductPage;
                        }
                        if (user != null && role.equals("Customer")) {//role Customer

                            url = Constants.Index;
                        }
                    }
                    if (result[3].equals("false")) {//account was banned
                        url = Constants.LoginPage;
                    }
                }
                if (result[0].equals("0")) {// invalid password or username
                    request.setAttribute("loginError", "*Username or Password is invalid");
                    url = Constants.Index;

                }
            }
           RequestDispatcher rd = request.getRequestDispatcher(url);
           rd.forward(request, response);
        }catch (Exception ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
